package com.mfn.sportjava.knowledge.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mfn.sportjava.knowledge.model.KnowledgeEntry;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * KnowledgeEntry 的 MyBatis Mapper 接口
 * @author Anyang
 * @version 1.0.0
 * @date 2025/05/18
 */
@Mapper
public interface KnowledgeEntryMapper extends BaseMapper<KnowledgeEntry> {

    /**
     * 根据 matchKey 列表查询。
     * MyBatis-Plus 的 BaseMapper 没有直接提供 findByXXXIn 方法，
     * 但可以通过 QueryWrapper 或自定义 SQL 实现。
     * 这里使用 QueryWrapper 演示。
     */
    default List<KnowledgeEntry> findByMatchKeyIn(List<String> matchKeys) {
        if (matchKeys == null || matchKeys.isEmpty()) {
            return List.of();
        }
        // 使用 QueryWrapper 构建 IN 查询
        return selectList(new QueryWrapper<KnowledgeEntry>().in("match_key", matchKeys));
    }

    /**
     * 根据联赛、主队、客队查询，并按创建时间降序排序。
     * 使用 QueryWrapper 实现。
     * @param league 联赛
     * @param homeTeam 主队
     * @param awayTeam 客队
     * @return 知识条目列表
     */
    default List<KnowledgeEntry> findByLeagueAndHomeTeamAndAwayTeamOrderByCreatedAtDesc(String league, String homeTeam, String awayTeam) {
        return selectList(
            new QueryWrapper<KnowledgeEntry>()
                .eq(league != null && !league.isBlank(), "league", league)
                .eq(homeTeam != null && !homeTeam.isBlank(),"home_team", homeTeam)
                .eq(awayTeam != null && !awayTeam.isBlank(),"away_team", awayTeam)
                .orderByDesc("created_at")
        );
    }

    /**
     * 根据联赛和任一球队（主队或客队）查询，并按创建时间降序排序。
     * @param league 联赛
     * @param teamName 球队名
     * @return 知识条目列表
     */
    default List<KnowledgeEntry> findByLeagueAndTeamOrderByCreatedAtDesc(String league, String teamName) {
        if (league == null || league.isBlank() || teamName == null || teamName.isBlank()) {
            return List.of();
        }
        return selectList(
            new QueryWrapper<KnowledgeEntry>()
                .eq("league", league)
                .and(qw -> qw.eq("home_team", teamName).or().eq("away_team", teamName))
                .orderByDesc("created_at")
        );
    }
}
